package com.qf.demo1.ps;

import com.rabbitmq.client.*;

import java.io.IOException;
import java.util.concurrent.TimeoutException;

public class Consumer1 {
    public static void main(String[] args) throws IOException, TimeoutException {
        //创建连接工厂
        ConnectionFactory factory = new ConnectionFactory();
        //rabbitmq服务器ip(虚拟机写虚拟机ip)
        factory.setHost("localhost");
        //rabbitmq服务器端口
        factory.setPort(5672);
        //用户名&密码
        factory.setUsername("cdm");
        factory.setPassword("cdm");
        //设置虚拟注解
        factory.setVirtualHost("cdm");

        //获取连接
        Connection connection = factory.newConnection();
        //获取交互的channel通道
        Channel channel = connection.createChannel();

        //如果队列存在，不创建；如果不存在则创建
        channel.queueDeclare("ps.que1",true,false,false,null);

        //消费消息
        /*
            queue – 消费的队列名称
            autoAck – 是否自动确认。true自动确认，消息会消费后，自动删除；false，需要手动确认后才会删除
            callback – 处理消息的回调
         */
        channel.basicConsume("ps.que1",true,new DefaultConsumer(channel){
            //当消息到达后，触发的回调方法
            /*
                String consumerTag：消费端标记，每个消费端的标记唯一不重复的
                Envelope envelope:生产端信息的封装对象（生产端的唯一标识、交换机、路由键信息）
                AMQP.BasicProperties properties: 生产端发送消息时的额外数据
                byte[] body： 消息体
             */
            @Override
            public void handleDelivery(String consumerTag, Envelope envelope, AMQP.BasicProperties properties, byte[] body) throws IOException {
                System.out.println("consumerTag：" + consumerTag);
                System.out.println("msg: " + new String(body,"utf-8"));
                System.out.println("----------------------");
            }
        });

//        channel.close();
//        connection.close();
    }
}
